﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.EntityModel;

namespace YasharEl.Infrastructure.Core.Personification
{
    [Serializable]
    public class MaritalStatus : Enumeration
    {
        #region TypeSafe Static Enumerations

        public static readonly MaritalStatus Single = new SingleMaritalStatus();
        public static readonly MaritalStatus Married = new MarriedMaritalStatus();
        public static readonly MaritalStatus Divorced = new DivorcedMaritalStatus();
        public static readonly MaritalStatus Widowed = new WidowedMaritalStatus();
        public static readonly MaritalStatus Separated = new SeparatedMaritalStatus();

        #endregion

        #region Constructors

        public MaritalStatus(int value, string shortName,string longName)
	    {

	    }

        #endregion

        #region Inner Classes - Type safe concrete enumerations

        [Serializable]
        private class SingleMaritalStatus : MaritalStatus
        {
            public SingleMaritalStatus()
                :base(1, "Single", "Refers to persons who report themselves as never married")
            {

            }
        }

        [Serializable]
        private class MarriedMaritalStatus : MaritalStatus
        {
            public MarriedMaritalStatus()
                : base(2, "Married", "Refers to people who were currently married at the time of enumeration. The term, ‘married’, includes those married by law or tradition or religious rites.")
            {

            }
        }

        [Serializable]
        private class DivorcedMaritalStatus : MaritalStatus
        {
            public DivorcedMaritalStatus()
                : base(3, "Divorced", "Refer to those whose marriages were terminated through divorce by law or religious arrangement or separated for a long duration without any possibility of reconciliation.")
            {

            }
        }

        [Serializable]
        private class WidowedMaritalStatus : MaritalStatus
        {
            public WidowedMaritalStatus()
                : base(4, "Widowed", "Refers to those whose marriages were terminated through death or their spouses and were not remarried at the time of enumeration.")
            {

            }
        }

        [Serializable]
        private class SeparatedMaritalStatus : MaritalStatus
        {
            public SeparatedMaritalStatus()
                : base(5, "Separated", "Refer to those still married but not living together. Possibility of temporary separation and reconciliation later.")
            {

            }
        }

        #endregion
    }
}
